/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Entidades.grafo;

import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;

/**
 *
 * @author Gabriel
 */
public class Grafo {
    private Nodo nodos[];
    private Arco grafo[][];
    private int pos= 0;

    public Grafo(int n){
        nodos= new Nodo[n];
        grafo= new Arco[n][n];
    }

    public void agregarNodo(String contenido, int posX, int posY, int width, int height){
        Nodo nodo= new Nodo();
        nodo.setPosX(posX);
        nodo.setPosY(posY);
        nodo.setWidth(width);
        nodo.setHeight(height);
        nodo.setContenido(contenido);
        nodos[pos]= nodo;
        pos++;
    }

    public void unir(int posOrigen, int posDestino){
        Arco arco= new Arco();

        Nodo origen= nodos[posOrigen];
        Nodo destino= nodos[posDestino];

        arco.setPosX(origen.getPosX() + origen.getWidth());
        arco.setPosY(origen.getPosY() + origen.getHeight()/2);

        arco.setPosXX(destino.getPosX());
        arco.setPosYY(destino.getPosY() + destino.getHeight()/2);

        grafo[posOrigen][posDestino]= arco;
    }

    public void dibujarGrafo(Graphics2D g){
        Stroke stroke= new BasicStroke(1.5f);
        g.setStroke(stroke);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        dibujarNodos(g);
        dibujarArcos(g);
    }

    private void dibujarNodos(Graphics2D g){
        for(int i= 0; i<nodos.length; i++)
            nodos[i].dibujar(g);
    }

    private void dibujarArcos(Graphics2D g){
        for(int i= 0; i<grafo.length; i++)
            for(int j=0; j<grafo[i].length; j++)
                if(grafo[i][j] != null) grafo[i][j].dibujar(g);
    }
}
